home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / tool / dolmorph / src / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-19  |  7.1 KB  |  295 lines

  1. /*===========================================
  2.           DolphMorph(ドルフモーフ)
  3.  
  4.       モーフィング&変形アニメ作成ソフト
  5.  
  6.   モーフィングアルゴリズム: EAST 1994
  7.   インターフェース作成:     松内 良介 1994
  8. ===========================================*/
  9. #define    MODULE_MAIN
  10. #if 0
  11.     main.c
  12.         メインモジュール
  13.         
  14.  
  15. #endif
  16.  
  17. #include <stdio.h>
  18. #include <stdlib.h>
  19. #include <string.h>
  20. #include <winb.h>
  21. #include <te.h>
  22. #include <fntb.h>
  23. #include <gui.h>
  24. #include <file_dlg.h>
  25. #include <egb.h>
  26. #include <ryosuke.h>
  27. #include <usrlib.h>
  28.  
  29. #include "morph.h"
  30. #include "points.h"
  31. #include "desktop.h"
  32. #include "imstore.h"
  33. #include "guisub.h"
  34. #include "morphgo.h"
  35. #include "icon.h"
  36.  
  37. #include <fmcfrb.h>
  38.  
  39. char    *guiEgbPtr ;            /*    EGB のワークアドレス    */
  40. char    guiSndPtr[16*1024] ;    /*    SND のワークアドレス    */
  41.  
  42. static void (*pfIdle)(void) = 0;
  43. static    TIM_CALEN    pre_time = {-1,0,0,0,0,0,0,0,0};
  44.  
  45. static void idleFunc(void)
  46. {
  47.     TIM_CALEN time;
  48.     TIM_rdcalendar(&time);
  49.     time.msec = (time.msec / 50) & 1;
  50.     if (memcmp(&pre_time,&time,sizeof(TIM_CALEN)) != 0)
  51.     {
  52.         static char dateStr[30];
  53.         static char *weekName[] = {"日","月","火","水","木","金","土"};
  54.         sprintf(dateStr, "%4d.%02d.%02d(%s) %02d%1c%02d",
  55.                 time.year, time.month, time.day, weekName[time.what_day],
  56.                 time.hour, ": "[time.msec], time.minute);
  57.         WINCLIP *pwc;
  58.         WIN_beginUpDateObj(idDesktopClockMsg, &pwc);
  59.         MMI_SendMessage(idDesktopClockMsg, MM_SETMSG, 1, dateStr);
  60.         MMI_SendMessage(idDesktopClockMsg, MM_SHOW, 0);
  61.         WIN_endUpDateObj(pwc);
  62.         pre_time = time;
  63.     }
  64.     if (pfIdle != 0)
  65.         (*pfIdle)();
  66. }
  67.  
  68. static int init_module(void)
  69. {
  70.     EGB_work = guiEgbPtr;
  71.     if (TIFFinitworkGUI() != 0)
  72.         return -1;
  73.     if (init_imstore() != 0)
  74.         return -1;
  75.     if (init_points() != 0)
  76.         return -1;
  77.     if (init_morphgo() != 0)
  78.         return -1;
  79.     if (icon_setup() != 0)
  80.         return -1;
  81.     if (init_movfile() != 0)
  82.         return -1;
  83.     if (RM_init() != 0)
  84.         return -1;
  85.     pfIdle = MMI_GetIdleTaskFunc();
  86.     MMI_SetIdleTaskFunc(idleFunc);
  87.     desktop_checkActivity();
  88.     return 0;
  89. }
  90.  
  91. static void close_module(void)
  92. {
  93.     end_imstore();
  94.     end_points();
  95.     end_morphgo();
  96.     end_movfile();
  97.     RM_end();
  98.     MMI_SetIdleTaskFunc(pfIdle);
  99. }
  100.  
  101. void main()
  102. {
  103.     MMICTRL ctrl;
  104.     extern int APL_init() ;
  105.  
  106.     /*    致命的エラーハンドラの登録    */
  107.     FM_SetVector() ;
  108.  
  109.     /*    サウンドの初期化    */
  110.     SND_init(guiSndPtr) ;
  111.  
  112.     /*    初期化処理    */
  113.         ctrl.page0 = 3 ;            /* page0側解像度 */
  114.         ctrl.page1 = 10 ;            /* page1側解像度 */
  115.         ctrl.writePage = 0 ;        /* 書き込みページ */
  116.         ctrl.displayPage = 3 ;        /* 表示ページフラグ */
  117.         ctrl.priority = 0 ;            /* 表示プライオリティ */
  118.  
  119.         ctrl.mode = 0 ;                /* 色数(0:16色 1:256色 2:3万色) */
  120.         ctrl.width = 512 ;            /* VRAMの横の長さ(バイト単位) */
  121.         ctrl.size = 0 ;                /* メモリ領域の大きさ */
  122.         ctrl.ptr = NULL ;            /* メモリ領域のアドレス */
  123.         ctrl.asize = 0 ;            /* ユーザ領域の大きさ */
  124.         ctrl.aptr = NULL ;            /* ユーザ領域のアドレス */
  125.         ctrl.fr.lupx = 0 ;            /* 表示画面枠 */
  126.         ctrl.fr.lupy = 0 ;
  127.         ctrl.fr.rdwx = 639 ;
  128.         ctrl.fr.rdwy = 479 ;
  129.         ctrl.move.lupx = 0 ;        /* 部品移動枠 */
  130.         ctrl.move.lupy = 20 ;        /* (ダイアログ移動範囲制限(y座標)) */
  131.         ctrl.move.rdwx = 639 ;
  132.         ctrl.move.rdwy = 479 ;
  133.         ctrl.white = 15 ;            /* 白の色番号 */
  134.         ctrl.black = 8 ;            /* 黒の色番号 */
  135.         ctrl.gray  = 4 ;            /* 灰色の色番号 */
  136.         ctrl.xor   = 14 ;            /* 反転色の色番号 */
  137.     if (MMI_Open( &ctrl ) == NOERR)
  138.     {
  139.         /*    初期化に成功すればメインループに入る.    */
  140.         if (APL_init() == NOERR)
  141.         {
  142.             FDG_SaveCurDir() ;
  143.             FDG_InitFileDlg() ;
  144.             // extern void FDGdump(void);
  145.             // FDGdump();
  146.             RM_setFileDlgStyle(1);
  147.             MMI_ExecSystem() ;
  148.             FDG_FreeFileDlg();
  149.             FDG_RecovCurDir() ;
  150.         }
  151.     }
  152.  
  153.     /*    終了処理    */
  154.     close_module();
  155.     MMI_Close() ;
  156.     SND_end() ;
  157.  
  158.     /*    致命的エラーハンドラの復帰    */
  159.     FM_ResetVector() ;
  160. }
  161.  
  162. static int setMosPtr(int num)
  163. {
  164.     SetMouse16(num, WHITE, BLACK);
  165.     return NOERR;
  166. }
  167.  
  168.  
  169.  
  170.  
  171.  
  172. int APL_init()
  173. {
  174.     extern MMIINIT    initDataZABOUT ;
  175.     extern MMIINIT    initDataZALERT ;
  176.     extern MMIINIT    initDataZDESKTOP ;
  177.     extern MMIINIT    initDataZIMSTORE ;
  178.     extern MMIINIT    initDataZPOINTS ;
  179.     extern MMIINIT    initDataZMORPHGO ;
  180.     extern MMIINIT    initDataZMOVFILE ;
  181.     extern MMIINIT    initDataZMOVIE ;
  182.     extern MMIINIT    initDataZPOINTS ;
  183.  
  184.     register int    ret ;
  185.  
  186.     /*    EGB ワークアドレスの取得.    */
  187.     guiEgbPtr = MMI_GetEgbPtr() ;
  188.  
  189.     /*  裏画面の設定  */
  190.     EGB_resolution(guiEgbPtr, 1, 10);
  191.     EGB_writePage(guiEgbPtr, 1);
  192.     EGB_displayStart(guiEgbPtr, 2, 2,2);        /* 画面拡大 */
  193.     EGB_displayStart(guiEgbPtr, 3, 320,240);    /* 表示画面の大きさ */
  194.     EGB_displayPage(guiEgbPtr, 0, 3);
  195.     EGB_writePage(guiEgbPtr, 0);
  196.  
  197.     /*    ハイパ型部品の初期化            */
  198.     if ((ret = MMI_initHyper()) < 0)
  199.         return ret ;
  200.     /*    ダイアログ型部品の初期化        */
  201.     if ((ret = MMI_initDialogL40()) < 0)
  202.         return ret ;
  203.     /*    アラート型部品の初期化            */
  204.     if ((ret = MMI_initAlertL40()) < 0)
  205.         return ret ;
  206.     /*    ウインドウ型部品の初期化        */
  207.     if ((ret = MMI_initWindowL40()) < 0)
  208.         return ret ;
  209.     /*    メッセージ型部品の初期化        */
  210.     if ((ret = MMI_initMessageL40()) < 0)
  211.         return ret ;
  212.     /*    メニュー型部品の初期化            */
  213.     if ((ret = MMI_initMenuL40()) < 0)
  214.         return ret ;
  215.     /*    ボタン型部品の初期化            */
  216.     if ((ret = MMI_initButtonL40()) < 0)
  217.         return ret ;
  218.     /*    ドロウボタン型部品の初期化        */
  219.     if ((ret = MMI_initDrawButtonL40()) < 0)
  220.         return ret ;
  221.     /*    アイコンボタン型部品の初期化    */
  222.     if ((ret = MMI_initIconL40()) < 0)
  223.         return ret ;
  224.     /*    トグルアイコン型部品の初期化    */
  225.     if ((ret = MMI_initToggleIconL40()) < 0)
  226.         return ret ;
  227.     /*    メニューアイテム型部品の初期化    */
  228.     if ((ret = MMI_initMenuItemL40()) < 0)
  229.         return ret ;
  230.     /*    スクロール型部品の初期化        */
  231.     if ((ret = MMI_initScrollBarL40()) < 0)
  232.         return ret ;
  233.     /*    テキスト型部品の初期化            */
  234.     if ((ret = MMI_initTextL40()) < 0)
  235.         return ret ;
  236.     /*    リストメニュー型部品の初期化    */
  237.     if ((ret = MMI_initListMenuL40()) < 0)
  238.         return ret ;
  239.     /*    数値入力型部品の初期化            */
  240.     if ((ret = MMI_initNumBoxL40()) < 0)
  241.         return ret ;
  242.  
  243.     /*    デフォルトビジュアルエフェクトの登録    */
  244.     MMI_SetUpVisualEffect() ;
  245.  
  246.     /*    背景データの初期化                        */
  247.     EGB_tmenuPalette2(guiEgbPtr) ;
  248.  
  249.     /*    データの登録        */
  250.     if ((ret = MMI_Init(&initDataZABOUT)) < 0)
  251.         return ret ;
  252.  
  253.     if ((ret = MMI_Init(&initDataZALERT)) < 0)
  254.         return ret ;
  255.  
  256.     if ((ret = MMI_Init(&initDataZMORPHGO)) < 0)
  257.         return ret ;
  258.  
  259.     if ((ret = MMI_Init(&initDataZMOVIE)) < 0)
  260.         return ret ;
  261.  
  262.     if ((ret = MMI_Init(&initDataZDESKTOP)) < 0)
  263.         return ret ;
  264.  
  265.     if ((ret = MMI_Init(&initDataZMOVFILE)) < 0)
  266.         return ret ;
  267.  
  268.     if ((ret = MMI_Init(&initDataZIMSTORE)) < 0)
  269.         return ret ;
  270.  
  271.     if ((ret = MMI_Init(&initDataZPOINTS)) < 0)
  272.         return ret ;
  273.  
  274.     /*    SIDEWORKメニューを登録する                */
  275.     MMI_SetUpSDKMenu( idDesktopMItem_System , 2 ) ;
  276.  
  277.     if ((ret = init_module()) < 0)
  278.         return ret ;
  279.         
  280.     MMI_SendMessage(idPointsWin, MM_ATTACH, 1, idDesktopWinAttachHyper);
  281.     MMI_SendMessage(idImageStoreWin[0], MM_ATTACH, 1, idDesktopWinAttachHyper);
  282.     MMI_SendMessage(idImageStoreWin[1], MM_ATTACH, 1, idDesktopWinAttachHyper);
  283.  
  284.     /*  マウスカーソル形状の設定 */
  285.     MMI_SetPtrFunc( setMosPtr );
  286.     MG_mosDisp(2);
  287.     MG_PopPtr(MOSICON_ARROW);
  288.     MG_mosDisp(3);
  289.  
  290.     /*    背景を表示する                            */
  291.     MMI_SendMessage(MMI_GetBaseObj(), MM_SHOW, 0) ;
  292.  
  293.     return NOERR ;
  294. }
  295.